package minix.components;

import minix.entities.Profil;

import org.apache.tapestry5.annotations.Log;
import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.hibernate.annotations.CommitAfter;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.slf4j.Logger;
import org.springframework.security.core.context.SecurityContextHolder;

public class NominerMedlem {

	@Inject
	private Logger logger;
	@Inject
	private Session session;
	@Property
	private Profil nominertAvProfil;
	@Parameter(required = true, allowNull = false)
	private Profil profil;
	private Profil profilenTilBrukerenSomNominerer;

	private Profil hentProfilenTilInloggetBruker() {
		String brukernavn = SecurityContextHolder.getContext().getAuthentication().getName();
		Profil tmpProfil = (Profil) session.createCriteria(Profil.class).add(Restrictions.eq("brukernavn", brukernavn))
				.uniqueResult();
		return tmpProfil;
	}

	@Log
	@CommitAfter
	Object onAction(Long id) {
		Profil denneBrukerensProfil = hentProfilenTilInloggetBruker();
		Profil denNominertesProfil = (Profil) session.get(Profil.class, id);
		denNominertesProfil.leggTilNominertAv(denneBrukerensProfil);
		session.merge(denNominertesProfil);
		return true;
	}

	public boolean getKanNominere() {
		return profil.getNominertAv().contains(profil);
	}

	public Profil getProfilenTilBrukerenSomNominerer() {
		return profilenTilBrukerenSomNominerer;
	}

	public void setProfilenTilBrukerenSomNominerer(Profil profilenTilBrukerenSomNominerer) {
		this.profilenTilBrukerenSomNominerer = profilenTilBrukerenSomNominerer;
	}

	public Profil getProfil() {
		return profil;
	}

	@Log
	public void setProfil(Profil profil) {
		this.profil = profil;
	}

}
